Visualizzazione dei database e relative tabelle su un server.

Abbiamo visto come funziona la connessione a MySQL tramite il PHP, adesso vedremo alcune delle funzioni predefinite per la gestione di un database MySQL. Queste funzioni sono:

- mysql_list_dbs() che elenca la lista dei database presenti nel server;

- mysql_num_rows() che restituisce il numero di righe presenti nell'insieme restituito da un operazione. In pratica al momento che si esegue
                                        un operazione del tipo "dammi l'elenco delle tabelle presenti in un database" esso restituisce il numero delle tabelle.

- mysql_tablename() che diversamente da quello che si può intuire essa può ricavare il nome di un database o di una tabella a partire dal
                                        risultato di un operazione.

Lo scopo iniziale del nostro script sarà quello di visualizzare l'elenco dei database presenti nel nostro server (localhost). Tramite il nostro amato Blocco Note scriviamo il seguente script PHP:

<?
   $connessione = mysql_connect("localhost", "nick", "password")
                                  or die("Impossibile stabilire una connessione");

    $databases = mysql_list_dbs($connessione)
                              or die("Impossibile ottenere una lista dei database");

     $elenco = "<ul>";
     $i = 0;

     while ($i < mysql_num_rows($databases))
        {
           $nomi[$i] = mysql_tablename($databases, $i);
           $elenco .= "<li>$nomi[$i]";
           $i++;
         }
    $elenco .= "</ul>";
?>
<html><head><title>Elenco database e tabelle su localhost</title></head>
<body>
<h2><b>Elenco database e relative tabelle su localhost:</b></h2>
<p><? echo "$elenco"; ?>
</body>
</html>

Salviamo il file con il nome di elencodb.php e, come al solito, memorizziamolo nella directory radice e mandiamo in esecuzione.
Il risultato sarà, come vedremo, un elenco non ordinato dei database presenti nella directory dell'SQL.
Allo stesso file adesso integriamo la porzione di script PHP per la visualizzazione delle tabelle dei singoli database presenti, modificando anche la procedura di visualizzazione del tutto:

<?
     $connessione = mysql_connect("localhost", "nick", "password")
                                    or die("Impossibile stabilire una connessione");

     $databases = mysql_list_dbs($connessione)
                               or die("Impossibile ottenere una lista dei database");

     $elenco = "<ul>";
     $i = 0;

      while ($i < mysql_num_rows($databases))
         {
           $nomi[$i] = mysql_tablename($databases, $i);
           $elenco .= "<li>$nomi[$i]";
              if (($nomi[$i] != "mysql")&&($nomi[$i] != "tempdata"))
                {
                   $tabelle = mysql_list_tables($nomi[$i])
                                      or die("Impossibile ottenere una lista delle tabelle del database");
                   $elencotab = "<ul>";
                   $num = 0;
                   while ($num < mysql_num_rows($tabelle))
                      {
                        $nomitab[$num] = mysql_tablename($tabelle, $num);
                        $elencotab .= "<li>$nomitab[$num]";
                        $num++;
                       }
                   $elencotab .= "</ul>";
                 }
             $elenco .= "$elencotab";
             $i++;
           }
      $elenco .= "</ul>";
?>
<html><head><title>Elenco database e tabelle su localhost</title></head>
<body>
<h2><b>Elenco database e relative tabelle su localhost:</b></h2>
<p><? echo "$elenco"; ?>
</body>
</html>

In pratica analizzando attentamente il nostro nuovo listato con il precedente non abbiamo fatto altro che aggiungere un nuovo comando, mysql_tablename() contenuto nella variabile $nomi, seguito dal parametro che contiene la lista dei database e dal corrispondente contatore, all'interno del ciclo per l'elencazione dei database, in modo da ottenere la lista dei nomi delle tabelle contenute nei singoli database; quindi verificato che il controllo non cerchi di elencare le tabelle di sistema "mysql" e "tempdata", in quanto il tentativo di visualizzazione genererebbe un messaggio d'errore, creiamo il ciclo di elencazione delle restanti tabelle che verrà memorizzato in una seconda lista non ordinata e poi aggregata alla prima; quindi, con codice HTML, vengono visualizzate entrambe.
Salviamo la modifica fatta al file e mandiamo in esecuzione. Appariranno due o più liste non ordinate, in base a quante ne abbiamo create nuove all'inizio delle lezioni, nidificate una sull'altra a visualizzare correttamente i database e le loro tabelle.